﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using RESTVeterinariaServices.Dominio;
using RESTVeterinariaServices.Persistencia;
using System.Data.SqlClient;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Net;

namespace RESTVeterinariaServices
{
    public class ClienteService : IClienteService
    {
        private ClienteDAO dao = new ClienteDAO();

        public Cliente CrearCliente(Cliente ClienteACrear)
        {
            int existe = 0;
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                string query = "SELECT COUNT(*) FROM Cliente WHERE NumDocumento= @NumDocumento";
                using (SqlCommand valida = new SqlCommand(query, con))
                {
                    valida.Parameters.Add(new SqlParameter("@NumDocumento", ClienteACrear.NumDocumento));
                    existe = (int)valida.ExecuteScalar();
                }
            }
            if (existe > 0)
            {
                throw new WebFaultException<MensajeRetornoWS>(
                    new MensajeRetornoWS()
                    {
                        IsValid = false,
                        txtMensaje = "El numero de documento del Cliente ya existe.",
                        PkReference = 0
                    },
                        HttpStatusCode.InternalServerError);
            }
            return dao.Crear(ClienteACrear);
        }

        public Cliente ObtenerCliente(string IdCliente)
        {
            return dao.obtener(IdCliente);
        }

        public List<Cliente> ListarTodos()
        {
            return dao.ListarTodos();
        }

        public Cliente ModificarCliente(Cliente ClienteAModificar)
        {
            int existe = 0;
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                string query = "SELECT COUNT(*) FROM dbo.Cliente WHERE NumDocumento=@NumDocumento AND idCliente<>@idCliente";
                using (SqlCommand valida = new SqlCommand(query, con))
                {
                    valida.Parameters.Add(new SqlParameter("@idCliente", ClienteAModificar.idCliente));
                    valida.Parameters.Add(new SqlParameter("@txtClienteNombre", ClienteAModificar.txtClienteNombre));
                    valida.Parameters.Add(new SqlParameter("@txtClienteApellido", ClienteAModificar.txtClienteApellido));
                    valida.Parameters.Add(new SqlParameter("@NumDocumento", ClienteAModificar.NumDocumento));
                    valida.Parameters.Add(new SqlParameter("@Activo", ClienteAModificar.Activo));
                    existe = (int)valida.ExecuteScalar();
                }
            }
            if (existe > 0)
            {
                throw new WebFaultException<MensajeRetornoWS>(
                    new MensajeRetornoWS()
                    {
                        IsValid = false,
                        txtMensaje = "El numero de documento ingresado del Cliente ya existe.",
                        PkReference = 0
                    },
                        HttpStatusCode.InternalServerError);
            }
            return dao.Modificar(ClienteAModificar);
        }

        public void EliminarCliente(string IdCliente)
        {

        }

    }
}
